package main

import (
	"fmt"
	"time"
)

// 定义传输错误结构体
type transportError struct {
	// 发送端IP
	From string
	// 接收端IP
	To string
	// 错误消息
	Msg string
}

// 为结构体绑定Error()方法，从而使其实现error接口
func (err transportError) Error() string {
	return fmt.Sprintf("从【%s】到【%s】传输失败，原因：%s", err.From, err.To, err.Msg)
}

// 该函数将抛出异常
func throwError() {
	err := transportError{
		From: "129.78.135.57",
		To:   "10.87.56.154",
		Msg:  "连接远程主机失败",
	}

	panic(err)
}

func main10() {
	go func() {
		// 在子协程中调用throwError()函数，以抛出异常
		throwError()
	}()

	// 休眠10秒钟，保证子协程获得执行机会
	time.Sleep(10 * time.Second)
	fmt.Print("主协程成功退出")
}
